○리팩토링(refactoring) ○사용자 스토리(user story) ○소규모 릴리즈(small release) ○짝 프로그래밍(pair programming) ○테스트 우선 개발(test-first development)
○데이터 관리 컴포넌트, 인터랙션 제어 컴포넌트, 화면 관리 컴포넌트를 분리 ○하나의 데이터를 다양한 그래프로 보여 줄 수 있는 데스크탑 응용 프로그램 개발 ○데이터베이스 연동 부분과 사용자 웹 화면 제공 부분으로 나눈 웹 기반 응용 프로그램 개발
Animal a; a = new Dog( ); a.makeSound( ); // “멍멍” 출력함 a = new Cat( ); a.makeSound( ); // “야옹” 출력함
네트워크의 어떠한 노드라도 주어진 연산을 수행할 수 있는 비중앙집중적인(decentralized) 아키텍처로, 서버와 클라이언트의 구분이 없다. 별도의 중앙 서버 없이 사용자의 PC 사이에서 파일을 주고받기 위한 파일 공유 네트워크 등이 이에 해당한다.
abstract class Shape { public void paint() { draw(); } abstract public void draw(); } abstract class Circle extends Shape { public int radius; public Circle(int radius) { this.radius = radius; } double getArea() { return (3.14 * radius * radius); } } public class NamedCircle extends Circle { String name; public NamedCircle(int radius, String name) { super(radius); this.name = name; } public void draw() { System.out.println("반지름이 " + radius + "인 원을 그리다."); } public static void main(String[] args) { Shape s; s = new Shape(); NamedCircle w = new NamedCircle(5, "Ring"); System.out.println(w.getArea()); w.draw(); } }
(가)코드만 남아있고 관련 문서가 없을 때, 프로그램을 분석하여 프로그램 구조, 자료 구조, 모듈 사이의 관계 등 상세한 설계 정보를 추출함 (나)겉으로 보이는 동작이나 외부 행위를 바꾸지 않고 소프트웨어 내부 구조를 바꾸며 점진적으로 설계를 향상시키는 기법 (다)기존 시스템을 이해하여 새로운 기능을 추가하거나 성능을 향상시키는 등의 새로운 형태로 변경하는 것으로, 단순히 설계정보를 끌어내는 것뿐만 아니라 이 정보를 사용하여 보다 나은 시스템을 만드는 것
ㄱ.표현이 모호할 수 있고, 해석이 다를 수 있다. ㄴ.수학적 증명 기술을 이용하여 완전성을 검증할 수 있다. ㄷ.자연어를 기반으로 작성하기 때문에 쉽게 작성할 수 있다.
수정할 때마다 관련된 여러 클래스에서 수많은 자잘한 변경을 해야 하는 상황이 발생하여 여러 클래스를 동시에 수정해야 하는 상황
(가)무엇을 테스트할 것인지 생각한다. (나)테스트를 통과하도록 소스 코드를 작성한다. (다)테스트 코드를 작성한다. (라)소스 코드와 테스트 코드를 리팩토링한다. (마)구현해야 할 소스 코드가 남아 있으면 위의 단계를 반복한다.
슈팅 모바일 게임을 개발하는데, 이 게임은 사용자가 화면을 터치하면 게임 캐릭터가 사용자가 터치한 곳으로 무기를 발사해 적을 공격하는 기능이 있다. 이는 세부적으로 ‘사용자 터치 인식→터치 한 방향으로 캐릭터를 회전→무기를 겨누는 동작 실행→무기 발사’순서로 실행되는 단계를 가지며, 각 단계별 동작은 별도 클래스의 메서드로 구현된다. 따라서 캐릭터 무기 발사를 구현하기 위해서는 클라이언트 코드가 각각의 클래스와 내부 메서드 사용 방법을 알아야 한다. 이 문제를 해결하기 위해 클라이언트 코드에게는 위의 복잡한 메서드 호출 과정을 숨기고, 위 과정을 대신 수행하는 높은 레벨의 인터페이스를 제공하고자 한다.
int max(int a, int b, int c) { int result = a; if (b > result) result = b; if (c > result) result = c; return result; }
A.계산 범위 및 애플리케이션 경계 식별 B.기능점수 측정 유형 결정 C.미조정 기능점수 계산 D.조정 인자 계산
작업 | 선행작업 | 소요기간(일) |
---|---|---|
A | D | 15 |
B | A, D, E | 10 |
C | E | 15 |
D | - | 5 |
E | - | 10 |
F | A, B | 20 |
G | B, C | 15 |